package com.zsr.threadlocal;

import java.util.Hashtable;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;

/**
 * ThreadLocal测试类
 */
public class ThreadLocalTest {

//    public static Map<String,Object> data=new ConcurrentHashMap<>();

    public static Map<String,Object> data=new Hashtable<>();
    public static ThreadLocal<Object> threadLocal=new ThreadLocal<>();//这个相当于一个key为当前线程名的map，<>是value的泛型


    private static Random random =new Random();

    public static class Task implements Runnable{

        @Override
        public void run() {
            //在run方法中，随机生成一个变量（线程要关联数据）然后以当前线程名为key保存到map中
            int i = random.nextInt(1000);
            String name = Thread.currentThread().getName();

            System.out.println("线程["+name+"]生成的随机数是："+i);

            //data.put(name,i);
            threadLocal.set(i);

            new OrderService().createOrder();

            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //在Run方法结束之前，以当前线程名获取出数据并打印。查看是否可以去处
            //Object o =data.get(name);
            Object o = threadLocal.get();
            System.out.println("在线程["+name+"]快结束时取出关联的数据是："+o);

        }
    }

    public static void main(String[] args) {
        for(int i=0;i<3;i++){
            Thread thread = new Thread(new Task());
            thread.start();
        }
    }
}
